import { createRouter, createWebHistory } from 'vue-router'
import type { RouteRecordRaw } from 'vue-router'
import { isAuthenticated, getStoredUser } from '../api/auth'

const routes: Array<RouteRecordRaw> = [
  {
    path: '/',
    name: 'Home',
    component: () => import('../views/Home.vue'),
    meta: { requiresAuth: false }
  },
  {
    path: '/login',
    name: 'Login',
    component: () => import('../views/Login.vue'),
    meta: { requiresAuth: false }
  },
  {
    path: '/chat',
    name: 'Chat',
    component: () => import('../views/Chat.vue'),
    meta: { requiresAuth: true }
  },
  {
    path: '/register',
    name: 'Register',
    component: () => import('../views/Login.vue'), // 暂时使用Login页面，后续可以创建专门的注册页面
    meta: { requiresAuth: false }
  },
  {
    path: '/admin',
    name: 'Admin',
    component: () => import('../views/Admin.vue'),
    meta: { requiresAuth: true, requiresAdmin: true }
  },
  {
    path: '/:pathMatch(.*)*',
    redirect: '/'
  }
]

const router = createRouter({
  history: createWebHistory(),
  routes
})

// 全局前置守卫，用于路由拦截和身份验证
router.beforeEach((to, from, next) => {
  // 检查路由是否需要身份验证
  const requiresAuth = to.matched.some(record => record.meta.requiresAuth)
  const requiresAdmin = to.matched.some(record => record.meta.requiresAdmin)
  
  // 如果需要身份验证但用户未登录，重定向到登录页面
  if (requiresAuth && !isAuthenticated()) {
    next({ name: 'Login', query: { redirect: to.fullPath } })
  } else if (requiresAdmin) {
    // 如果需要管理员权限，检查用户角色
    const user = getStoredUser()
    // 检查用户是否有管理员角色（1:超级管理员 2:管理员）
    if (!user || (user.role !== 1 && user.role !== 2)) {
      next({ name: 'Home' }) // 如果没有权限，重定向到首页
    } else {
      next() // 有权限，继续访问
    }
  } else if (to.path === '/login' && isAuthenticated() && from.path === '/chat') {
    // 如果用户已登录且来自聊天页面，但尝试访问登录页面，重定向回聊天页面
    next({ name: 'Chat' })
  } else {
    // 其他情况正常跳转
    next()
  }
})

export default router 